package br.com.sgpv2.hibernate.movimentacao;

import java.util.List;

import br.com.sgpv2.controler.NegocioExeception;
import br.com.sgpv2.entity.movimentacao.Movimentacao;
import br.com.sgpv2.entity.movimentacao.MovimentacaoDTO;

public interface MovimentacaoRepository {
	
	/**
	 * Método que salva uma movimentacao no sistema.
	 */
	void salvar(Movimentacao movimentacao);

	/**
	 * Método que busca uma movimentacao no sistema.
	 */
	Movimentacao buscar(Integer pk) throws NegocioExeception;

	/**
	 * Método que altera uma movimentacao no sistema.
	 */
	void alterar(Movimentacao movimentacao);

	/**
	 * Método que lista todas as movimentacoes do sistema.
	 */
	List<Movimentacao> listar();

	/**
	 * Método que exclui uma movimentacao do sistema.
	 */
	void excluir(Movimentacao movimentacao);

	/**
	 * Consulta as movimentações da entidade configurada, considerando o período caso seja informado.
	 * @param periodo
	 * @return
	 */
	List<MovimentacaoDTO> consultarPorPeriodoEntidade(Integer mes, Integer ano);
	
	List<MovimentacaoDTO> consultarPorPeriodo(Integer mes, Integer ano);
	
	List<Movimentacao> consultarPorMesAnoMatricula(Integer mes, Integer ano, String matricula);

	List<Movimentacao> consultarPorMesAnoCompleto(Integer mes, Integer ano);
}
